package br.com.senac.digipao.servlet;

import br.com.senac.digipao.bean.Produto;
import br.com.senac.digipao.dao.ProdutoDao;
import java.io.IOException;
import java.sql.SQLException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name = "pesquisaProdutoServlet", urlPatterns = {"/pesquisaProduto"})
public class PesquisaProdutoServlet extends HttpServlet {

    @Override
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");

        String operacao = request.getParameter("operacao");

        switch (operacao) {
            case "Pesquisar":
                // pegando os parâmetros do request
                String parametro = request.getParameter("pesquisaProduto");
                try {
                    ProdutoDao dao = new ProdutoDao();
                    List<Produto> listaProduto = dao.listaProdutoPorParametros(parametro);

                    if (listaProduto.size() > 0) {
                        request.getSession().setAttribute("ListaProduto", listaProduto);
                    }

                    RequestDispatcher rd = request.getRequestDispatcher("/media/jsp/resultadoPesquisaProduto.jsp");
                    rd.forward(request, response);

                } catch (SQLException ex) {
                    Logger.getLogger(PesquisaProdutoServlet.class.getName()).log(Level.SEVERE, null, ex);
                }
                break;
            case "Alterar": {
                //recupera valor do idProduto do radio button selecionado
                int idProduto = Integer.parseInt(request.getParameter("select"));
                //recupera lista de produtos da sessão
                List<Produto> listaProduto = (List<Produto>) request.getSession(true).getAttribute("ListaProduto");
                //verifica se lista foi recuperada da sessão
                if (listaProduto != null && listaProduto.size() > 0) {
                    //procura na lista qual foi o produto selecionado e quando encontra, salva na sessão como "ProdutoParaAlterar"
                    for (int i = 0; i <= listaProduto.size(); i++) {
                        if (listaProduto.get(i).getIdProduto() == idProduto) {
                            request.getSession().setAttribute("ProdutoParaAlterar", listaProduto.get(i));
                            break;
                        }
                    }

                } else {
                    try {
                        //se não foi encontrada a lista, busca produto do banco
                        ProdutoDao dao = new ProdutoDao();
                        request.getSession().setAttribute("ProdutoParaAlterar", dao.buscaProdutoPorId(idProduto));
                    } catch (SQLException ex) {
                        Logger.getLogger(PesquisaProdutoServlet.class.getName()).log(Level.SEVERE, null, ex);
                    }
                }
                RequestDispatcher rd = request.getRequestDispatcher("/media/jsp/alteraCadastroProdutos.jsp");
                rd.forward(request, response);
                break;
            }
            case "Deletar": {
                try {
                    ProdutoDao dao = new ProdutoDao();
                    dao.excluiProdutoPorId(Integer.parseInt(request.getParameter("select")));
                } catch (SQLException ex) {
                    Logger.getLogger(PesquisaProdutoServlet.class.getName()).log(Level.SEVERE, null, ex);
                }
                request.getSession().removeAttribute("ListaProduto");
                RequestDispatcher rd = request.getRequestDispatcher("/media/jsp/excluidoComSucesso.jsp");
                rd.forward(request, response);
                break;
            }
            case "PesquisarNovamente": {
                request.getSession().removeAttribute("ListaProduto");
                RequestDispatcher rd = request.getRequestDispatcher("/media/jsp/pesquisaProdutos.jsp");
                rd.forward(request, response);
                break;
            }
            case "Cancelar": {
                request.getSession().removeAttribute("ProdutoParaAlterar");
                request.getSession().removeAttribute("ListaProduto");
                RequestDispatcher rd = request.getRequestDispatcher("/media/jsp/menuPrincipal.jsp");
                rd.forward(request, response);
                break;
            }
        }
    }
}
